#ifndef __G_GAME_MANAGER_H__
#define __G_GAME_MANAGER_H__

#include "GTypes.h"
#include "GSingleton.h"
#include "GInitializable.h"

namespace GEngine
{
	class GInputMap;

	class GGameManager : public GUtil::GInitializable, public GUtil::GSingleton<GGameManager>
	{
	friend class GUtil::GSingleton<GGameManager>;
	
	private:

		//! Scene and other game related thing will be added here

		GInputMap*		ActiveInputMap;
		GInputMap*		ActiveInputMapDefault;

		GInputMap*		GlobalInputMap;
		GInputMap*		GlobalInputMapDefault;

						GGameManager();
						~GGameManager();

	public:

		void			ResetActiveInputMap();
		void			ResetGlobalInputMap();

		void			SetActiveInputMap(GInputMap* Map);
		GInputMap*		GetActiveInputMap() const;

		void			SetGlobalInputMap(GInputMap* Map);
		GInputMap*		GetGlobalInputMap() const;

		bool			Update(float ElapsedTime);

		bool			Initialize() OVERRIDE;
		bool			InitializeLate() OVERRIDE;
		
		void			Uninitialize() OVERRIDE;
		void			UninitializeEarly() OVERRIDE;
	};
	
#define mGGameManager	GEngine::GGameManager::GetInstance()

}


#endif